package com.exam.service;


import java.util.List;
import java.util.Map;

import com.exam.exception.StudentNonExist;
import com.exam.pojo.Paging;
import com.exam.pojo.Student;

/**
 * @author 郭荣锋
  *  学生服务层
 */
public interface StudentService {
	
	/**
	  *  根据学生学号获取学生对象
	 * @param sno 学号 
	 * @return 学生对象
	 */
	Student getStudentBySno(String sno);
	
	/**
	 * 添加学生
	 * @param map 包括 studentName 学生姓名，majorName专业名称，classesName 班级名称，password 密码
	 * @return void
	 */
	void addStudent(Map map);
	
	/**
	 * 删除学生
	 * @param student 学生对象
	 * @return 
	 * @throws StudentNonExist 学生不存在异常
	 */
	void deleteStudent(Student student) throws StudentNonExist;
	
	/**
	 * 更新学生信息 
	 * @param map 包括classesName班级名称，majorName 专业名称，studentName 学生姓名，password 密码
	 * @return void
	 */
	void updateStudent(Map map);
	
	/**
	 * 根据班级编号获取学生列表
	 * @param classesId 班级编号
	 * @return List<Student> 学生列表
	 */
	List<Student> getStudentByClassesId(Integer classesId);
	
	/**
	 * 通过专业名称获取学生列表
	 * @param majorName 专业名称
	 * @return List<Student> 学生列表
	 */
	List<Student> getStudentByMajorName(String majorName);
	
	/**
	  *  学生列表分页
	 * @param map 参数列表(可选:1.majorName专业名称,2.classesName班级名称)
 	 * @return 已分页的学生列表
	 */
	Paging<Student> studentPaging(Map<Object, Object> map);
	
	/**
	 * 以分页的形式获取学生列表
	 * @param map majorName 专业名称  classesName 班级名称
	 * @return 被删除学生列表
	 */
	public Paging<Student> getDeletedStudentByPaging(Map<Object, Object> map);
	
	/**
	  * 获取学生总记录数
	 * @param map 可选:majorId 专业编号,classesId 班级编号
	 * @return 总记录数
	 */
	Integer getTotalCount(Map<Object, Object> map);
	
	/**
	  *   通过学生编号获取学生对象
	 * @param studentId　学生编号
	 * @return 学生对象
	 */
	Student getStudentById(Integer studentId);
	
	/**
	 * 恢复被删除的学生
	 * @param studentId 学生编号 
	 * @return void
	 */
	public void recoverStudent(Integer studentId);
	
}
